This report is (c) University of Southampton and is published under the CC-BY-4.0 license. You may share, re-use or adapt for commercial or non-commercial purposes with citation.
If you wish to use any of the material in this report please cite it as:
This data report uses two different datasets to estimate the greenhouse gas emissions of the Hampshire County under three different definitions:
The analysis is carried out for the ‘Wider Hampshire’ - all local authority districts in the Hampshire County including the unitary authorities of Portsmouth, Southampton and the Isle of Wight. Note that this differs from the baseline estimated for the Hampshire County Council Climate Change Strategy by The Carbon Trust which excluded Portsmouth, Southampton and the Isle of Wight.
Load data sources
# BEIS LA co2 data
beis_la_co2_DT <- data.table::fread(paste0(params$dataPath,
"beis/localAuthority/carbon/2005_2019/", "2005-19_Local_Authority_CO2_emissions.csv"))
beis_la_co2_DT[, subSectorLabel := `LA CO2 Sub-sector`]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Agriculture",
"Industry: Agriculture",
subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Large Industrial Installations",
"Industry: Large Industrial Installations",
subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Road Transport (A roads)",
"Transport: (A roads)",
subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Road Transport (Minor roads)",
"Transport: (Minor roads)",
subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Road Transport (Motorways)",
"Transport: (Motorways)",
subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Diesel Railways",
"Transport: Diesel Railways",
subSectorLabel)
]
beis_la_co2_DT[, la_name := `Local Authority`]
# set up the colours
# colours borrowed from https://git.soton.ac.uk/twr1m15/la_emissions_viz/-/blob/master/shiny/app.R
# for details, use set for each sector
industry_pal <- RColorBrewer::brewer.pal(n = 8, name = "Greys")[4:8] # industry greys, 5 categories incl Agric
commercial_pal <- RColorBrewer::brewer.pal(n = 8, name = "RdPu")[4:6] # commercial greys, 3 categories
domestic_pal <- RColorBrewer::brewer.pal(n = 4, name = "Blues")[2:4] # domestic blues, 3 categories
public_pal <- RColorBrewer::brewer.pal(n = 4, name = "Purples")[2:4] # public purple, 3 categories
transport_pal <- RColorBrewer::brewer.pal(n = 6, name = "Oranges")[2:6] # transport oranges, 5 categories
lulucf_pal <- RColorBrewer::brewer.pal(n = 9, name = "Greens")[4:9] # lulucf greens, 6 categories
# for details, combine sets
detailed_pal <- c(commercial_pal, domestic_pal, industry_pal, lulucf_pal, public_pal, transport_pal)
beis_la_co2_DT[, subSectorLabelFact := factor(subSectorLabel)]
catList <- unique(beis_la_co2_DT$subSectorLabelFact) # this is not alphabetical - why?
catList2 <- c(catList[1:15],catList[25] , catList[16:24])
names(detailed_pal) <- catList2
hampshire_beis_la_co2_DT <- getSolent(beis_la_co2_DT)
hampshire_beis_la_co2_DT[, widerHampshire := ifelse(la_name == "Southampton" |
la_name == "Portsmouth" |
la_name == "Isle of Wight",
"Wider Hampshire",
"Hampshire CC")]
## Warning in `[.data.table`(hampshire_beis_la_co2_DT, , `:=`(widerHampshire, :
## Invalid .internal.selfref detected and fixed by taking a (shallow) copy of the
## data.table so that := can add this new column by reference. At an earlier point,
## this data.table has been copied by R (or was created manually using structure()
## or similar). Avoid names<- and attr<- which in R currently (and oddly) may
## copy the whole data.table. Use set* syntax instead to avoid copying: ?set, ?
## setnames and ?setattr. If this message doesn't help, please report your use case
## to the data.table issue tracker so the root cause can be fixed or this message
## improved.
# CSE impact tool data
cse_territorial_abs_DT <- data.table::fread(paste0(params$dataPath,
"cse/cse_ImpactTool/", "local-authority-all-territorial-absolute.csv.gz"))
cse_territorial_abs_DT[, la_name := name]
hampshire_cse_territorial_abs_DT <- getSolent(cse_territorial_abs_DT)
# make long form for easy summary etc
lDT <- melt(hampshire_cse_territorial_abs_DT)
## Warning in melt.data.table(hampshire_cse_territorial_abs_DT): id.vars and
## measure.vars are internally guessed when both are 'NULL'. All non-numeric/
## integer/logical type columns are considered id.vars, which in this case are
## columns [id, name, la_name, ...]. Consider providing at least one of 'id' or
## 'measure' vars in future.
# remove Power generation - CSE methodology: "Gridded data area apportioned, point data summed within area. Note: this category overlaps with electricity emissions and is provided for information only"
hampshire_cse_territorial_abs_DT <- lDT[variable != "Power generation (t CO2e)"]
hampshire_cse_territorial_abs_DT[, widerHampshire := ifelse(la_name == "Southampton" |
la_name == "Portsmouth" |
la_name == "Isle of Wight",
"Wider Hampshire",
"Hampshire CC")]
cse_consumption_abs_DT <- data.table::fread(paste0(params$dataPath,
"cse/cse_ImpactTool/", "local-authority-all-consumption-absolute.csv.gz"))
cse_consumption_abs_DT[, la_name := name]
hampshire_cse_consumption_abs_DT <- getSolent(cse_consumption_abs_DT)
# make long form for easy summary etc
hampshire_cse_consumption_abs_DT <- melt(hampshire_cse_consumption_abs_DT)
## Warning in melt.data.table(hampshire_cse_consumption_abs_DT): id.vars and
## measure.vars are internally guessed when both are 'NULL'. All non-numeric/
## integer/logical type columns are considered id.vars, which in this case are
## columns [id, name, la_name, ...]. Consider providing at least one of 'id' or
## 'measure' vars in future.
hampshire_cse_consumption_abs_DT[, widerHampshire := ifelse(la_name == "Southampton" |
la_name == "Portsmouth" |
la_name == "Isle of Wight",
"Wider Hampshire",
"Hampshire CC")]
As background to the Hampshire County Council Climate Change Strategy, the Carbon Trust was asked to establish baseline emissions for the County excluding Southampton, Portsmouth and Isle of Wight. This baseline was converted to the proportion of emissions from different energy sources and reported as a trend plot on p14 of the Strategy as shown below. This highlighted that the main components of emissions were:
Total kT CO2 baseline values were not included in this report.
Hampshire emissions (CarbonTrust, 2020)
# imputed from values given in https://documents.hants.gov.uk/climate-change/ClimateChange-Strategic-Framework-of-Programmes.pdf
hampshire_CT_terr_Totals <- data.table::fread(here::here("data", "ClimateChange-Strategic-Framework-of-Programmes_imputed_Carbon_2019.csv"))
ct_transport <- hampshire_CT_terr_Totals[compareLab == "Transport", .(ktco2_CT)]
ct_res <- hampshire_CT_terr_Totals[compareLab == "Residential", .(ktco2_CT)]
ct_ind <- hampshire_CT_terr_Totals[compareLab == "Industry & Commercial", .(ktco2_CT)]
ct_total <- ct_transport + ct_res + ct_ind
ct_transport_pc <- round(100*(ct_transport/ct_total))
ct_res_pc <- round(100*(ct_res/ct_total))
ct_ind_pc <- round(100*(ct_ind/ct_total))
However the HCC Climate Change Strategic Framework of Programmes which lays out the estimated total kT CO2 and % reduction for a range of proposed actions, enables the following baseline values to be imputed:
Giving a total of 8,446 kT CO2 for the 11 districts.
These were calculated under the territorial emissions method and include only CO2 emissions.
BEIS have produced a useful mapping tool which can be used to compare the spatial distribution of different emissions sources at district level.
Figure 6.1 shows trends over time for these categories.
t <- hampshire_beis_la_co2_DT[, .(`Total kT CO2e` = sum(`Territorial emissions (kt CO2)`, na.rm = TRUE)), keyby = .(`Calendar Year`, subSectorLabelFact)]
ggplot2::ggplot(t, aes(x = `Calendar Year`,
y = `Total kT CO2e`,
fill = subSectorLabelFact)) +
geom_col(position = "stack") +
scale_fill_manual(values = detailed_pal) +
theme(legend.position = "bottom", ) +
guides(fill=guide_legend(ncol=3)) +
theme(legend.title = element_blank()) +
labs(x = "LA CO2 Sub-sector")
Figure 6.1: BEIS CO2 emissions by category (Hampshire, 2019 ordered by emissions value)
Figure 6.2 shows trends over time for these categories using a line plot to make it easier to see which categories have declined.
p <- ggplot2::ggplot(t, aes(x = `Calendar Year`,
y = `Total kT CO2e`,
colour = subSectorLabelFact)) +
geom_line() +
scale_colour_manual(values = detailed_pal) +
theme(legend.position = "bottom", ) +
guides(colour=guide_legend(ncol=3)) +
theme(legend.title = element_blank()) +
labs(x = "LA CO2 Sub-sector")
p
Figure 6.2: BEIS CO2 emissions by category (Hampshire, 2019 ordered by emissions value)
Figure 6.3 shows the same plot using plotly so that you can hover over the lines. This only works if the output is html and you are viewing this in a web browser…
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following objects are masked from 'package:flextable':
##
## highlight, style
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
plotly::ggplotly(p)
Figure 6.3: BEIS CO2 emissions by category (Hampshire, 2019 ordered by emissions value)
Table 6.1 shows the total emissions for 2019 for all 14 districts.
t <- hampshire_beis_la_co2_DT[`Calendar Year` == 2019, .(`Total kT CO2e` = sum(`Territorial emissions (kt CO2)`, na.rm = TRUE))]
makeFlexTable(t, cap = "BEIS CO2 emissions (kT, 2019)")
Total kT CO2e |
8,421.4 |
sumBEIS_kt <- sum(hampshire_beis_la_co2_DT[`Calendar Year` == 2019]$`Territorial emissions (kt CO2)`)
Table 6.2 shows the total emissions for 2019 ordered by category. Figure 6.4 shows the data as a bar plot ordered by value. The categories have been colour-coded so that related categories have similar colours in the palette. The largest emissions sources under this method are clearly visible (domestic gas, transport and domestic electricity).
hampshire_beis_terr_Totals <- hampshire_beis_la_co2_DT[`Calendar Year` == 2019, .(`Total kT CO2` = sum(`Territorial emissions (kt CO2)`, na.rm = TRUE)), keyby = .(subSectorLabelFact)]
absTotal <- sum(hampshire_beis_la_co2_DT[`Calendar Year` == 2019, abs(`Territorial emissions (kt CO2)`)])
hampshire_beis_terr_Totals[, `% of gross` := 100*(`Total kT CO2`/absTotal)]
makeFlexTable(hampshire_beis_terr_Totals[, .(Source = subSectorLabelFact,
`Total kT CO2`, `% of gross`)], cap = "BEIS CO2 emissions sorted by category (Hampshire, 2019)")
Source | Total kT CO2 | % of gross |
Commercial 'Other Fuels' | 10.7 | 0.1 |
Commercial Electricity | 504.6 | 5.2 |
Commercial Gas | 310.1 | 3.2 |
Domestic 'Other Fuels' | 239.4 | 2.4 |
Domestic Electricity | 689.2 | 7.0 |
Domestic Gas | 1,716.0 | 17.5 |
Industry 'Other Fuels' | 419.1 | 4.3 |
Industry Electricity | 326.5 | 3.3 |
Industry Gas | 167.1 | 1.7 |
Industry: Agriculture | 108.6 | 1.1 |
Industry: Large Industrial Installations | 118.9 | 1.2 |
LULUCF Net Emissions: Cropland | 138.4 | 1.4 |
LULUCF Net Emissions: Forest land | -484.3 | -5.0 |
LULUCF Net Emissions: Grassland | -194.5 | -2.0 |
LULUCF Net Emissions: Settlements | 124.2 | 1.3 |
LULUCF Net Emissions: Wetlands | -0.3 | -0.0 |
Public Sector 'Other Fuels' | 4.1 | 0.0 |
Public Sector Electricity | 122.0 | 1.2 |
Public Sector Gas | 188.8 | 1.9 |
Transport Other | 32.1 | 0.3 |
Transport: (A roads) | 1,443.0 | 14.8 |
Transport: (Minor roads) | 1,368.1 | 14.0 |
Transport: (Motorways) | 1,027.3 | 10.5 |
Transport: Diesel Railways | 42.4 | 0.4 |
ggplot2::ggplot(hampshire_beis_terr_Totals, aes(x = reorder(subSectorLabelFact, -`Total kT CO2`),
y = `Total kT CO2`,
fill = subSectorLabelFact)) +
geom_col() +
scale_fill_manual(values = detailed_pal) +
theme(legend.position = "none") +
labs(x = "LA CO2 Sub-sector") +
coord_flip()
Figure 6.4: BEIS CO2 emissions by category (Hampshire, 2019 ordered by emissions value)
# p <- ggplot2::ggplot(subsetDT, aes(x = `Calendar Year`, y = `Territorial emissions (kt CO2)`,
# fill = subSectorLabel,
# colour = subSectorLabel)) +
# geom_col(position = "stack") +
# scale_colour_manual(values = detailed_pal) +
# scale_fill_manual(values = detailed_pal) #
# p
Figure 6.5 shows a cumulative emissions plot for the BEIS 2019 data ordered by the emissions source’s magnitude. The largest increments are therefore due to domestic gas use and various forms of transport. The plot uses vertical lines to show the sources which comprise 50%, 75% and 90% of the total emissions. The plot curls due to the source categories with negative emissions such that the final point represents the total ‘net’ emissions.
t <- hampshire_beis_terr_Totals[order(-`Total kT CO2`)]
t[, cumulative := cumsum(`Total kT CO2`)]
pc_50 <- 0.5*(sum(t$`Total kT CO2`))
pc_75 <- 0.75*(sum(t$`Total kT CO2`))
pc_90 <- 0.90*(sum(t$`Total kT CO2`))
p <- ggplot2::ggplot(t, aes(x = reorder(subSectorLabelFact, -`Total kT CO2`),
y = cumulative,
colour = subSectorLabelFact)) +
geom_point() +
ylim(0,NA) +
scale_colour_manual(values = detailed_pal) +
theme(legend.position = "none") +
labs(x = "LA CO2 Sub-sector",
y = "Cumulative kT CO2/annum",
cap = "Vertical lines % of net emissions") +
coord_flip()
# add reference lines
p +
geom_hline(aes(yintercept = pc_50), colour = "grey") +
geom_hline(aes(yintercept = pc_75), colour = "grey") +
geom_hline(aes(yintercept = pc_90), colour = "grey") +
annotate("text", x = "Transport Other", y = pc_50, label = "50%", colour = "grey") +
annotate("text", x = "Transport Other", y = pc_75, label = "75%", colour = "grey") +
annotate("text", x = "Transport Other", y = pc_90, label = "90%", colour = "grey")
Figure 6.5: Plot of cumulative emissions (BEIS, 2019)
h_beis2019 <- hampshire_beis_la_co2_DT[`Calendar Year` == 2019]
beis_trans <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Motorway" | `LA CO2 Sub-sector` %like% "roads", `Territorial emissions (kt CO2)`])
beis_motorways <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Motorway", `Territorial emissions (kt CO2)`])
beis_d_gas <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Domestic Gas", `Territorial emissions (kt CO2)`])
beis_d_elec <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Domestic Electricity", `Territorial emissions (kt CO2)`])
beis_forest <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Forest", `Territorial emissions (kt CO2)`])
beis_grassland <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Grass", `Territorial emissions (kt CO2)`])
beis_wetlands <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Wetland", `Territorial emissions (kt CO2)`])
beis_crop <- sum(h_beis2019[`LA CO2 Sub-sector` %like% "Crop", `Territorial emissions (kt CO2)`])
h_beis2019[, zeroC := ifelse(`LA CO2 Sub-sector` %like% "Gas",
0,
`Territorial emissions (kt CO2)`)]
h_beis2019[, zeroC := ifelse(`LA CO2 Sub-sector` %like% "Electricity",
0,
`Territorial emissions (kt CO2)`)]
h_beis2019[, zeroC := ifelse(`LA CO2 Sub-sector` %like% "roads",
0,
`Territorial emissions (kt CO2)`)]
beis_allSum <- sum(h_beis2019$`Territorial emissions (kt CO2)`)
zeroCsum <- sum(h_beis2019$zeroC)
Thus, if we focus on BEIS territorial CO2 only then the main sources of emissions are:
Taken together these domestic (residential) emissions comprise 29 % of the estimated total.
Negative emissions (sequestration) sources are:
As Figure 6.4 showed, these levels of sequestration currently provide a negligible offset to the overall emissions. Note also that cropland is a net emitter at 138 kT (2019).
Figure 6.2 showed that the only emissions sources showing substantial decreases over time have been electricity due to grid decarbonisation and (potentially) reductions in some industrial activity as well as the use of ‘Other fuels’ by industry. Although emissions from domestic gas use have also fallen over time they appear to have stabilised since 2014. Perhaps of most concern given their dominant contribution however is the relative stability of road transport emissions over the 2005 - 2019 period.
These are calculated under the territorial emissions method and include all greenhouse gas emissions.
Table 7.1 shows the total emissions for 2019.
t <- hampshire_cse_territorial_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000)]
makeFlexTable(t, cap = "CSE territorial emissions (Hampshire, 2019)")
Total kT CO2e |
12,216.4 |
sumCSETerr_kt <- sum(hampshire_cse_territorial_abs_DT$value)/1000
Table 7.2 shows the total emissions for 2019 by category. Figure 7.1 shows the data as a bar plot. The largest emissions sources under this method are clearly visible (domestic gas, transport and aviation). Note that some of the categories do not exactly match those used in the BEIS data.
Ignore the (t CO2e) in the label - the plot shows kT for easy comparison (labels to be fixed).
hampshire_cse_terr_Totals <- hampshire_cse_territorial_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000), keyby = .(variable)]
absTotal <- sum(hampshire_cse_territorial_abs_DT[, abs(value)])/1000
hampshire_cse_terr_Totals[, `% of gross` := 100*(`Total kT CO2e`/absTotal)]
makeFlexTable(hampshire_cse_terr_Totals, cap = "CSE all territorial emissions by category (Hampshire, 2019)")
variable | Total kT CO2e | % of gross |
Housing - Mains gas (t CO2e) | 1,657.5 | 12.7 |
Housing - Electricity (t CO2e) | 841.3 | 6.4 |
Housing - Oil (t CO2e) | 294.0 | 2.3 |
Housing - LPG (t CO2e) | 38.0 | 0.3 |
Housing - Biomass (t CO2e) | 8.0 | 0.1 |
Housing - Coal (t CO2e) | 11.0 | 0.1 |
Industrial and commercial - Electricity (t CO2e) | 1,110.0 | 8.5 |
Industrial and commercial - Mains gas (t CO2e) | 702.5 | 5.4 |
Industrial and commercial - Other Fuels (t CO2e) | 443.4 | 3.4 |
Industrial and commercial - Large industrial consumers (t CO2e) | 81.5 | 0.6 |
Agriculture - Fuel (t CO2e) | 106.7 | 0.8 |
Agriculture - Livestock and crop-related emissions (t CO2e) | 457.0 | 3.5 |
Aviation (t CO2e) | 1,202.6 | 9.2 |
Shipping (t CO2e) | 479.0 | 3.7 |
Diesel fuelled railways (t CO2e) | 45.3 | 0.3 |
F-gases (t CO2e) | 374.1 | 2.9 |
Road Transport (t CO2e) | 4,054.6 | 31.0 |
Other Transport (t CO2e) | 31.2 | 0.2 |
Waste management (t CO2e) | 703.7 | 5.4 |
Land use, land-use change, and forestry (t CO2e) | -425.2 | -3.3 |
ggplot2::ggplot(hampshire_cse_terr_Totals, aes(x = reorder(variable, -`Total kT CO2e`),
y = `Total kT CO2e`,
fill = variable)) +
geom_col() +
#scale_fill_manual(values = detailed_pal) +
theme(legend.position = "none") +
labs(x = "Emissions source") +
coord_flip()
Figure 7.1: CSE all territorial emissions by category (Hampshire, 2019 ordered by emissions value)
# p <- ggplot2::ggplot(subsetDT, aes(x = `Calendar Year`, y = `Territorial emissions (kt CO2)`,
# fill = subSectorLabel,
# colour = subSectorLabel)) +
# geom_col(position = "stack") +
# scale_colour_manual(values = detailed_pal) +
# scale_fill_manual(values = detailed_pal) #
# p
Figure 7.2 shows a cumulative emissions plot for the CSE territorial data ordered by the emissions source’s magnitude. The largest increments are therefore due to personal transport, domestic gas use and aviation. The plot shows the sources which comprise 50%, 75% and 90% of the total emissions. The plot curls due to the source categories with negative emissions such that the final point represents the total ‘net’ emissions.
t <- hampshire_cse_terr_Totals[order(-`Total kT CO2e`)]
t[, cumulative := cumsum(`Total kT CO2e`)]
pc_50 <- 0.5*(sum(t$`Total kT CO2e`))
pc_75 <- 0.75*(sum(t$`Total kT CO2e`))
pc_90 <- 0.90*(sum(t$`Total kT CO2e`))
p <- ggplot2::ggplot(t, aes(x = reorder(variable, -`Total kT CO2e`),
y = cumulative,
colour = variable)) +
geom_point() +
ylim(0,NA) +
theme(legend.position = "none") +
labs(x = "Emissions source",
y = "Cumulative kT CO2e/annum",
cap = "Vertical lines % of net emissions") +
coord_flip()
# add reference lines
p +
geom_hline(aes(yintercept = pc_50), colour = "grey") +
geom_hline(aes(yintercept = pc_75), colour = "grey") +
geom_hline(aes(yintercept = pc_90), colour = "grey") +
annotate("text", x = "Other Transport (t CO2e)", y = pc_50, label = "50%", colour = "grey") +
annotate("text", x = "Other Transport (t CO2e)", y = pc_75, label = "75%", colour = "grey") +
annotate("text", x = "Other Transport (t CO2e)", y = pc_90, label = "90%", colour = "grey")
Figure 7.2: Plot of cumulative emissions (BEIS, 2019)
cse_terr_Transport <- hampshire_cse_terr_Totals[variable %like% "Road Trans"]$`Total kT CO2e`
beis_terr_Transport <- sum(hampshire_beis_terr_Totals[subSectorLabelFact %like% "road" |
subSectorLabelFact %like% "Motorway"]$`Total kT CO2`)
cse_terr_DomGas <- hampshire_cse_terr_Totals[variable %like% "Housing - Mains gas"]$`Total kT CO2e`
beis_terr_DomGas <- hampshire_beis_terr_Totals[subSectorLabelFact %like% "Domestic Gas"]$`Total kT CO2`
cse_terr_aviation <- hampshire_cse_terr_Totals[variable %like% "Aviation"]$`Total kT CO2e`
cse_terr_shipping <- hampshire_cse_terr_Totals[variable %like% "Shipping"]$`Total kT CO2e`
cse_terr_fgas <- hampshire_cse_terr_Totals[variable %like% "F-gases"]$`Total kT CO2e`
cse_terr_waste <- hampshire_cse_terr_Totals[variable %like% "Waste"]$`Total kT CO2e`
cse_terr_AgricLivestock <- hampshire_cse_terr_Totals[variable %like% "Agriculture - Livestock"]$`Total kT CO2e`
cse_terr_diff <- cse_terr_aviation + cse_terr_shipping + cse_terr_fgas + cse_terr_waste
pc_diff <- 100*(cse_terr_diff/(sumCSETerr_kt - sumBEIS_kt))
pc_tot_diff <- 100*((sumCSETerr_kt-sumBEIS_kt)/sumBEIS_kt)
Thus, if we focus on CSE territorial emissions, which include all emissions, the main sources are:
These figures draw attention to the significant emissions due to aviation which are not included in the BEIS LA level data. Indeed, 73 % of the 45 % increase from the BEIS figure comprises emissions from:
Note that under the CSE approach, Agriculture - Livestock and crop-related emissions amount to 457 T CO2e compared to the BEIS value for Cropland at 138 T CO2e which gives some indication of the additional emissions due to methane (noting that fuel used for agriculture is already in a separate category under the CSE approach - see methodology, p15).
These are calculated under the consumption emissions method and include all greenhouse gas emissions.
Table 8.1 shows the total emissions for 2019.
t <- hampshire_cse_consumption_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000)]
makeFlexTable(t, cap = "CSE consumption emissions (Hampshire, 2019)")
Total kT CO2e |
13,633.3 |
sumCSECons_kt <- sum(hampshire_cse_consumption_abs_DT$value)/1000
Table 8.2 shows the total emissions for 2019 by category. Figure 8.1 shows the data as a bar plot. The largest emissions sources under this method are clearly visible (purchased goods, services and food/diet and gas-use). Note that some of the categories do not exactly match those used in the BEIS data. Ignore the (t CO2e) in the label - the plot shows kT for easy comparison.
Ignore the (t CO2e) in the label - the plot shows kT for easy comparison (labels to be fixed).
hampshire_cse_cons_Totals <- hampshire_cse_consumption_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000), keyby = .(variable)]
absTotal <- sum(hampshire_cse_consumption_abs_DT[, abs(value)])/1000
hampshire_cse_cons_Totals[, `% of gross` := 100*(`Total kT CO2e`/absTotal)]
makeFlexTable(hampshire_cse_cons_Totals[, .(Source = variable,
`Total kT CO2e`, `% of gross`)], cap = "CSE all consumption emissions ordered by category (Hampshire, 2019)")
Source | Total kT CO2e | % of gross |
Consumption of goods and services - Purchase of goods (t CO2e) | 2,623.4 | 19.2 |
Consumption of goods and services - Use of services (t CO2e) | 1,194.7 | 8.8 |
Consumption of goods and services - Other consumption related emissions (t CO2e) | 1,034.1 | 7.6 |
Food and diet - Meat and fish (t CO2e) | 1,722.0 | 12.6 |
Food and diet - Other food and drink (t CO2e) | 1,413.7 | 10.4 |
Housing - Mains gas (t CO2e) | 1,657.5 | 12.2 |
Housing - Electricity (t CO2e) | 841.3 | 6.2 |
Housing - Oil (t CO2e) | 294.0 | 2.2 |
Housing - LPG (t CO2e) | 38.0 | 0.3 |
Housing - Biomass (t CO2e) | 8.0 | 0.1 |
Housing - Coal (t CO2e) | 11.0 | 0.1 |
Travel - Flights (t CO2e) | 969.8 | 7.1 |
Travel - Public transport (t CO2e) | 399.2 | 2.9 |
Travel - Private transport (t CO2e) | 1,378.2 | 10.1 |
Waste - Waste (t CO2e) | 48.4 | 0.4 |
library(stringr)
hampshire_cse_cons_Totals[, variable_n := stringr::str_remove(variable, "Consumption of goods and services - ")]
ggplot2::ggplot(hampshire_cse_cons_Totals, aes(x = reorder(variable_n, -`Total kT CO2e`),
y = `Total kT CO2e`,
fill = variable_n)) +
geom_col() +
#scale_fill_manual(values = detailed_pal) +
theme(legend.position = "none") +
labs(x = "Emissions source") +
coord_flip()
Figure 8.1: CSE all territorial emissions ordered by category value (Hampshire, 2019 ordered by emissions value)
Figure 8.2 shows a cumulative emissions plot for the CSE territorial data ordered by the emissions source’s magnitude. The largest increments are therefore due to consumpiton of goods and services, food and diet (meat & fish) and mains gas use. The plot shows the sources which comprise 50%, 75% and 90% of the total emissions.
t <- hampshire_cse_cons_Totals[order(-`Total kT CO2e`)]
t[, cumulative := cumsum(`Total kT CO2e`)]
pc_50 <- 0.5*(sum(t$`Total kT CO2e`))
pc_75 <- 0.75*(sum(t$`Total kT CO2e`))
pc_90 <- 0.90*(sum(t$`Total kT CO2e`))
p <- ggplot2::ggplot(t, aes(x = reorder(variable_n, -`Total kT CO2e`),
y = cumulative,
colour = variable_n)) +
geom_point() +
ylim(0,NA) +
theme(legend.position = "none") +
labs(x = "Emissions source",
y = "Cumulative kT CO2e/annum",
cap = "Vertical lines % of net emissions") +
coord_flip()
# add reference lines
p +
geom_hline(aes(yintercept = pc_50), colour = "grey") +
geom_hline(aes(yintercept = pc_75), colour = "grey") +
geom_hline(aes(yintercept = pc_90), colour = "grey") +
annotate("text", x = "Housing - Oil (t CO2e)", y = pc_50, label = "50%", colour = "grey") +
annotate("text", x = "Housing - Oil (t CO2e)", y = pc_75, label = "75%", colour = "grey") +
annotate("text", x = "Housing - Oil (t CO2e)", y = pc_90, label = "90%", colour = "grey")
Figure 8.2: Plot of cumulative emissions (BEIS, 2019)
cse_cons_purch <- hampshire_cse_cons_Totals[variable %like% "Purchase of goods"]$`Total kT CO2`
cse_cons_food_meat <- hampshire_cse_cons_Totals[variable %like% "Meat and fish"]$`Total kT CO2`
cse_cons_DomGas <- hampshire_cse_cons_Totals[variable %like% "Housing - Mains gas"]$`Total kT CO2`
cse_cons_food_other <- hampshire_cse_cons_Totals[variable %like% "Other food and drink"]$`Total kT CO2`
cse_cons_private_trans <- hampshire_cse_cons_Totals[variable %like% "Private transport"]$`Total kT CO2`
cse_cons_flights <- hampshire_cse_cons_Totals[variable %like% "Flights"]$`Total kT CO2`
cons_sum <- cse_cons_purch + cse_cons_food_meat + cse_cons_DomGas + cse_cons_food_other + cse_cons_private_trans
con_sum_pc <- 100*(cons_sum/sumCSECons_kt)
Thus, if we focus on CSE consumption-based emissions which include emissions ‘outsourced’ to other geographical areas (including overseas), the main emissions sources comprising 65 % of emissions are:
Emissions due to Flights (970 kT CO2e) are lower than the territorial based Aviation emissions values since emissions due to freight are included under ‘Good and services.’
This approach to emissions accounting shows the extent to which the consumption of goods and services, diet and food as well as transport and domestic gas use dominate Hampshire’s ‘consumption’ emissions footprint.
sumBEIS_hcc_kt <- sum(hampshire_beis_la_co2_DT[widerHampshire != "Wider Hampshire" & `Calendar Year` == 2019, `Territorial emissions (kt CO2)`])
Overall, the total GHG emissions for Hampshire under different methodologies were found to be:
Given that the Carbon Trust area excludes Portsmouth, Southampton and the Isle of Wight it is unclear why this total is similar to the ‘14 local authorities’ BEIS data.
Which of these accounting methods we choose to focus on depends what we want to show and what we want to achieve. The same is true of the emissions subcategories. The BEIS data gives a partial view on territorial emissions as it excludes all non-CO2 emissions (such as methane from livestock) and also excludes aviation (flights & freight) and shipping. The CSE territorial emissions data includes these ‘missing’ emissions and so gives a much larger total as they are major contributors.
Table 9.1 compares the Carbon Trust, BEIS and CSE data to the extent that it is possible to do so from the data reported here.
hampshire_beis_terr_Totals[, compareLab := ifelse(subSectorLabelFact %like% "Transport", "Transport", "Other")]
hampshire_beis_terr_Totals[, compareLab := ifelse(subSectorLabelFact %like% "Domestic", "Residential", compareLab)]
hampshire_beis_terr_Totals[, compareLab := ifelse(subSectorLabelFact %like% "Commercial" | subSectorLabelFact %like% "Industry", "Industry & Commercial", compareLab)]
# NB - Public is coded to Other
hampshire_beis_Compare <- hampshire_beis_terr_Totals[, .(ktco2_beis = sum(`Total kT CO2`)), keyby = .(compareLab)]
hampshire_beis_Compare[, ktco2_beis_pc := 100*(ktco2_beis / sum(hampshire_beis_Compare$ktco2_beis))]
hampshire_cse_terr_Totals[, compareLab := ifelse(variable %like% "Transport", "Transport", "Other")]
hampshire_cse_terr_Totals[, compareLab := ifelse(variable %like% "Housing", "Residential", compareLab)]
hampshire_cse_terr_Totals[, compareLab := ifelse(variable %like% "Industrial" | variable %like% "Power", "Industry & Commercial", compareLab)]
hampshire_cse_terr_Totals[, compareLab := ifelse(variable %like% "Aviation", "Aviation", compareLab)]
hampshire_cse_terr_Compare <- hampshire_cse_terr_Totals[, .(ktco2_cse_terr = sum(`Total kT CO2e`)), keyby = .(compareLab)]
hampshire_cse_terr_Compare[, ktco2_cse_terr_pc := 100*(ktco2_cse_terr / sum(hampshire_cse_terr_Compare$ktco2_cse_terr))]
hampshire_cse_cons_Totals[, compareLab := ifelse(variable %like% "Travel", "Transport", "Other")]
hampshire_cse_cons_Totals[, compareLab := ifelse(variable %like% "Housing", "Residential", compareLab)]
hampshire_cse_cons_Totals[, compareLab := ifelse(variable %like% "Consumption", "Consumption of goods & services", compareLab)]
hampshire_cse_cons_Totals[, compareLab := ifelse(variable %like% "Food", "Food & diet", compareLab)]
hampshire_cse_cons_Totals[, compareLab := ifelse(variable %like% "Travel - Flights", "Aviation", compareLab)]
hampshire_cse_cons_Compare <- hampshire_cse_cons_Totals[, .(ktco2_cse_cons = sum(`Total kT CO2e`)), keyby = .(compareLab)]
hampshire_cse_cons_Compare[, ktco2_cse_cons_pc := 100*(ktco2_cse_cons / sum(hampshire_cse_cons_Compare$ktco2_cse))]
setkey(hampshire_beis_Compare, compareLab)
setkey(hampshire_cse_terr_Compare, compareLab)
setkey(hampshire_cse_cons_Compare, compareLab)
setkey(hampshire_CT_terr_Totals, compareLab)
dt <- hampshire_CT_terr_Totals[hampshire_beis_Compare][hampshire_cse_terr_Compare]
t <- merge(dt, hampshire_cse_cons_Compare, all = TRUE)
makeFlexTable(t[,.(Source = compareLab,
CarbonTrust = ktco2_CT,
`Carbon Trust %` = ktco2_CT_pc,
BEIS = ktco2_beis,
`BEIS %` = ktco2_beis_pc,
`CSE Territorial` = ktco2_cse_terr,
`CSE Territorial %` = ktco2_cse_terr_pc,
`CSE Consumption` = ktco2_cse_cons,
`CSE Consumption %` = ktco2_cse_cons_pc)][order(CarbonTrust)], cap = "Comparing emissions baselines (values = kT CO2e or %)")
Source | CarbonTrust | Carbon Trust % | BEIS | BEIS % | CSE Territorial | CSE Territorial % | CSE Consumption | CSE Consumption % |
Residential | 2,011 | 22.7 | 2,644.5 | 31.4 | 2,849.8 | 23.3 | 2,849.8 | 20.9 |
Transport | 3,157 | 36.1 | 3,912.9 | 46.5 | 4,085.8 | 33.4 | 1,777.3 | 13.0 |
Industry & Commercial | 3,278 | 38.8 | 1,965.6 | 23.3 | 2,337.4 | 19.1 | ||
Aviation | 1,202.6 | 9.8 | 969.8 | 7.1 | ||||
Consumption of goods & services | 4,852.3 | 35.6 | ||||||
Food & diet | 3,135.7 | 23.0 | ||||||
Other | -101.6 | -1.2 | 1,740.7 | 14.2 | 48.4 | 0.4 |
The table shows that the two main policy foci of the Hampshire County Council Climate Change Strategy - Transport and Residential - contribute at least 30% of emissions irrespective of the emissions accounting method used.
For reasons that are unclear, the Carbon Trust estimate for Industrial & Commercial emissions for the ‘11 districts’ appears to be considerably larger than the comparable BEIS ‘14 districts’ value. As a result the BEIS proportions for Transport and Residential emissions are higher (77% combined) compared to 58% in the Carbon Trust estimates for 11 districts.
Although the ‘14 districts’ BEIS and CSE (territorial) main categories are broadly similar in terms of kT CO2(e), the percentage contribution of Transport and Residential emissions are considerably lower (56%) for the CSE data. This is due to the inclusion of additional sources such as Aviation (10%, shown), as well as complete waste emissions, shipping, livestock emissions, F-gases and others (coded as ‘Other,’ 14%, but see Table 7.2 for details). These represent over 20% of county-wide emissions under the CSE territorial methodology.
Finally, the CSE consumption emissions data demonstrates the significant contribution that consumption of services as well as food and diet make to our ‘extended’ emissions footprint if we consider the emissions we have effectively outsourced to other geographical areas. This method transfers all of the industrial/commercial emissions and a significant proportion of the Transport/Aviation emissions to ‘Good and services’ and ‘Food and diet’ (i.e. supply chain transportation and distribution). As a result emissions from homes and private transport comprise only 30% of the total under this approach with ‘consumption’ representing 58% and flights a further 7%.
Future work could:
Analysis completed in 7.19 seconds ( 0.12 minutes) using knitr in RStudio with R version 4.1.1 (2021-08-10) running on x86_64-apple-darwin17.0.